package com.ht.base.system.biz.manager.impl;

import com.ht.base.system.biz.convert.AppSystemBeanUtil;
import com.ht.base.system.biz.manager.AppSystemManager;
import com.ht.base.system.common.pojo.bo.AppSystemBO;
import com.ht.base.system.common.pojo.qto.AppSystemQTO;
import com.ht.base.system.dao.dao.AppSystemDao;
import com.ht.base.system.dao.domain.AppSystemDO;
import org.base.common.appexception.AppErrorCodeEnum;
import org.base.common.appexception.AppException;
import org.base.common.constans.StatusConstant;
import org.base.common.page.PageBO;
import org.base.common.util.MD5Util;
import org.base.common.util.SnowFlakeIdUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * 应用列管理Service
 * 业务层处理
 * @author hdengxian
 * @date 2023-10-07
 */
@Component
public class AppSystemManagerImpl implements AppSystemManager {
    @Resource
    private AppSystemDao appSystemDao;

    @Override
    public Boolean checkAppId(String appId, String secretKey) {
        if (StringUtils.isBlank(appId) || StringUtils.isBlank(secretKey)) {
            return false;
        }
        AppSystemDO systemDO = appSystemDao.findByAppId(appId);
        if (systemDO == null) {
            return false;
        }
        if (!systemDO.getSecretKey().equals(secretKey)) {
            return false;
        }
        if (systemDO.getAppStatus().equals(StatusConstant.STRING_1)) {
            return false;
        }

        return Boolean.TRUE;
    }

    /**
     * 新增
     * 应用列管理
     * @param appSystemBO
     * @return 结果
     */
    @Override
    public Integer insertData(AppSystemBO appSystemBO){
        if (appSystemBO ==null) {
            throw new AppException("参数为空");
        }
        if (StringUtils.isBlank(appSystemBO.getAppName())) {
            throw new AppException("请填写应用名称");
        }
        if (StringUtils.isBlank(appSystemBO.getAppId())) {
            appSystemBO.setAppId(SnowFlakeIdUtil.getSnowFlakeId());
        }
        if (StringUtils.isBlank(appSystemBO.getAppStatus())) {
            //设置为默认-正常
            appSystemBO.setAppStatus(StatusConstant.STRING_0);
        }

        AppSystemQTO qto = new AppSystemQTO();
        qto.setAppId(appSystemBO.getAppId());
        Integer countNum = appSystemDao.findForPageCount(qto);
        if (countNum != null && countNum > 0) {
            throw new AppException("APPID:[" + appSystemBO.getAppId() + "]已被占用，请更换。");
        }
        appSystemBO.setSecretKey(MD5Util.encryption2ToMD5(appSystemBO.getAppId()));

        appSystemBO.setCreateTime(new Date());
        AppSystemDO saveData = AppSystemBeanUtil.convertToDO(appSystemBO);
        int count = appSystemDao.insert(saveData);

        return count;
    }

    /**
     * 修改
     * 应用列管理
     * @param appSystemBO
     * @return 结果
     */
    @Override
    public Boolean updateDataById(AppSystemBO appSystemBO) {
        if (appSystemBO == null || appSystemBO.getAppSystemId() == null){
            throw new AppException(AppErrorCodeEnum.PARAMETER_NULL);
        }
        //暂时禁止更改appid和密钥
        appSystemBO.setAppId(null);
        appSystemBO.setSecretKey(null);
        AppSystemDO updateData = AppSystemBeanUtil.convertToDO(appSystemBO);
        Integer count = appSystemDao.updateById(updateData);
        return Boolean.TRUE;
    }

    /**
     * 批量删除
     * 应用列管理
     * @param id
     * @return 结果
     */
    @Override
    public Boolean deleteById(Long id) {
        if (id == null){
            return Boolean.FALSE;
        }
        appSystemDao.deleteById(id);
        return Boolean.TRUE;
    }

    /**
     * 批量删除接口
     * @param ids 需要删除的应用列管理主键集合
     * @return
     */
    @Override
    public Boolean deleteByIds(Long[] ids){
        Integer count = appSystemDao.deleteByIds(ids);
        return Boolean.TRUE;
    }


    /**
     * 查询
     * 应用列管理
     * @param id
     * @return 应用列管理
     */
    @Override
    public AppSystemBO findById(Long id) {
        AppSystemDO data = appSystemDao.findById(id);
        return AppSystemBeanUtil.convertToBO(data);
    }

    /**
     * 分页查询列表
     * 应用列管理
     * @param qto
     * @return 应用列管理
     */
    @Override
    public PageBO<AppSystemBO> findDataForPage(AppSystemQTO qto) {
        PageBO<AppSystemBO> pageBO = new PageBO();
        if (qto == null) {
            return pageBO;
        }
        Integer count = appSystemDao.findForPageCount(qto);
        if (count == null || count <= 0) {
            return pageBO;
        }
        List<AppSystemDO> doList = appSystemDao.findForPage(qto);
        pageBO.setData(AppSystemBeanUtil.convertToBOList(doList), count);
        return pageBO;
    }


}
